package cn.kz.hrm.service.impl;

import cn.kz.hrm.domain.Pay;
import cn.kz.hrm.domain.PayAlipayInfo;
import cn.kz.hrm.domain.Shopcar;
import cn.kz.hrm.mapper.PayAlipayInfoMapper;
import cn.kz.hrm.mapper.PayMapper;
import cn.kz.hrm.service.IPayService;
import cn.kz.hrm.util.CodeGenerateUtils;
import cn.kz.hrm.utils.AlipayUtils;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author kz
 * @since 2020-07-14
 */
@Service
public class PayServiceImpl extends ServiceImpl<PayMapper, Pay> implements IPayService {

    @Autowired
    private PayAlipayInfoMapper payAlipayInfoMapper;

    /**
     * 生成支付单数据，默认的状态为未支付即0.1为已经支付。
     * @param shopcar
     */
    @Override
    public String payOrderAndPay(Shopcar shopcar) {
        //@todo 生成支付单，
        Pay pay = new Pay();
        //根据用户的id生成一个订单编号
        String payReques1t = null;
        //订单编号规则：(10位)：(年末尾*月，取后2位)+（用户ID%3.33*日取整后2位）+(timestamp*10000以内随机数，取后6位)
        String orderNum = CodeGenerateUtils.generateOrderSn(shopcar.getEmployeeId());
        //设置订单编号
        pay.setOrdernum(orderNum);
        //存储课程的id
        pay.setCourseId(shopcar.getCourseId());
        Date time = new Date();
        //订单的创建时间
        pay.setCreatetime(time);
        //课程的价格
        pay.setPrice(shopcar.getPrice());
        //购买的用户id
        pay.setUserId(shopcar.getEmployeeId());
        baseMapper.insert(pay);

        //todo 去支付。
        //从数据库中查询秘钥信息。
        PayAlipayInfo payAlipayInfo = payAlipayInfoMapper.select(1);
        System.out.println(payAlipayInfo.toString());
        //返回的一个form表单。是阿里支付的一个回调地址。
        String payRequest = AlipayUtils.sendPayRequest(payAlipayInfo, pay);
        return payRequest;
    }

    /**
     * 根据订单的唯一的编号进行查询订单信息。
     * @param orderNum
     * @return
     */
    @Override
    public Pay getByOrderNum(String orderNum) {
        return baseMapper.getByOrderNum(orderNum);
    }
}
